package cn.comon.app.scan.service.analysis.impl;

import java.net.URLEncoder;
import java.util.Properties;
import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import cn.comon.app.scan.entity.AsReportinfo;
import cn.comon.app.scan.service.analysis.IAnalysisRequest;

/**
 * 网秦软件检测接口
 * @author xujf
 *
 */
@Service("netqinRequestImpl")
@Scope("prototype")
@Lazy(value=true)
public class NetQinAnalysisRequestImpl implements IAnalysisRequest {
    private static Logger logger = Logger.getLogger(NetQinAnalysisRequestImpl.class.getName());
    
    public Object getSendData(Properties params, Object asReportinfo) {
        try {
            // 网秦接口数据
            JSONObject sendData = new JSONObject();
            AsReportinfo asReportinfoTMP = (AsReportinfo)asReportinfo;

            // 构造接口访问地址
            String sendUrl = null;
            StringBuffer sendUrlBf = new StringBuffer();
            sendUrlBf.append(params.getProperty("netqin.url"));
            //软件下载地址，需要先urlencoding 后，再进行参数赋值
            sendUrlBf.append("?url=");
            sendUrlBf.append(URLEncoder.encode(asReportinfoTMP.getPackageUrl(), "UTF-8"));
            //返回地址，用于在检测详情页面提供返回链接，该参数值需要URL Encoding（用途未知，空值）
//            sendUrlBf.append("&back=");
//            sendUrlBf.append(URLEncoder.encode(params.getProperty("netqin.back"), "UTF-8"));
            //授权码
            sendUrlBf.append("&key=");
            sendUrlBf.append(params.getProperty("netqin.key"));
            //输出内容的诧言，目前支持：lang=cn，中文,lang=en，英文
            sendUrlBf.append("&lang=cn");
            //输出内容的形式，目前支持：style=xml，返回标准xml格式检测结果
            sendUrlBf.append("&style=xml");
            //回调地址，用于在检测完成时回调通知，需保证每次请求此参数不重复，并先urlencoding后，再进行参数赋值。
            //(此接口是请求检测时传过去的，可以自定义)回调地址后加入待检测信息的ID，用于回调时区分记录。
            sendUrlBf.append("&callback=");
            logger.info("【NetQinAnalysisRequestImpl.getSendData sendUrl(URLEncoder前):" + params.getProperty("netqin.callback") + "?sid=" + asReportinfoTMP.getId() + "】");
            sendUrlBf.append(URLEncoder.encode(
                    params.getProperty("netqin.callback") + "?sid=" + asReportinfoTMP.getId(), "UTF-8"));

            //请求地址设定
            sendUrl = sendUrlBf.toString();
            sendData.put("sendUrl", sendUrl);
            sendData.put("postData", "");
            logger.info("【NetQinAnalysisRequestImpl.getSendData sendUrl(URLEncoder后):" + sendUrl + "】");
            return sendData;
       } catch (Exception e) {
            e.printStackTrace();
            logger.error(e);
            return null;
        }
    }
}